package com.ylfstu.map_;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapSource_ {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {

        Map map = new HashMap();
        map.put("No1", "ylf");
        map.put("No2", "张无忌");

        //1.k-v 最后是 HashMap$Node Node = newNode(hash, key, value, null)
        //2.k-v 为了方便程序员遍历，还会创建 EntrySet， 该集合存放元素的类型 Map.Entry ，而一个
        //  Entry 对象就有k, v, EntrySet<Entry<K,V>> ，即 transient Set<Map.Entry<K,V>> entrySet;
        //3.在EntrySet中，定义的类型是 Map.Entry ,但实际存放的还是 HashMap$Node
        //  这是因为 static class Node<K,V> implements Map.Entry<K,V>
        //4.当把 HashNode$Node 对象 存放到 EntrySet 就方便我们遍历 因为 Map.Entry 提供了重要方法
        //  k getKey(); V getValue();

        Set set = map.entrySet();
        System.out.println(set.getClass());
        for (Object obj : set) {
//            System.out.println(entry.getClass());
            // 为了从 HashMap$Node 取出 k-v
            //1.先做一个向下转型
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "-" + entry.getValue());
        }

    }
}
